//
// Created by iguilty on 2022-01-13.
//

#ifndef DESIGN_PATTERN_CPP_DECORATOR_H
#define DESIGN_PATTERN_CPP_DECORATOR_H

class Component{
public:
    virtual ~Component();
    virtual void Operation();
protected:
    Component();
};

class ConcreteComponent:public Component{
public:
    ConcreteComponent();
    ~ConcreteComponent();
    void Operation();
};

class Decorator:public Component{
public:
    Decorator(Component* component);
    virtual ~Decorator();
    void Operation();

protected:
    Component* _component;
};

class ConcreteDecorator:public Decorator{
public:
    ConcreteDecorator(Component* component);
    ~ConcreteDecorator();
    void Operation();
    void AddedBehavior();
};

#endif //DESIGN_PATTERN_CPP_DECORATOR_H
